next up previous
Next: 2.4.1 VirtualizedDirect Rendering Up: 2 Background Previous: 2.3 Virtual Graphics

2.4 SGI-style Graphics Hardware

Unlike most low-end workstation and PC graphics hardware, SGI graphics hardware does not expose a memory mapped frame buffer. Instead, graphics commands are issued to a graphics engine through the manipulation of memory mapped device registers. This interface to the graphics hardware is often called the graphics pipe or simply the pipe. Because all rendering operations are done through the graphics pipe, the pipe's virtual memory mapping can be used to control access to graphics rendering, i.e., virtualize graphics.

There is substantial variation in the extent of geometry and rasterization processing implemented within various SGI graphics hardware configurations. The high-end SGI graphics hardware [1] implements almost the entire OpenGL state machine within the graphics hardware. Most pipe commands (called tokens) sent to the graphics hardware have a fairly direct mapping to the OpenGL API. The high-end hardware is micro-coded and makes heavy use of pipelining and parallelism in its various stages.

The low-end SGI graphics hardware [15] implements only the back-end of the OpenGL state machine. Most high-level operations such as vertex transformation, polygon rasterization, texturing, and lighting are performed on the host processor inside the OpenGL library. But low-level operations such as line drawing, shading, span rendering, dithering, etc. are implemented in the hardware rendering engine.

Despite the variations in hardware across SGI's product line, a direct rendering OpenGL program will work (though perhaps not find the same frame buffer capabilities or achieve the same performance) across the entire range of SGI OpenGL-capable graphics hardware. All the rendering code for OpenGL that directly accesses the hardware is isolated in the OpenGL library which is implemented as a shared library. The shared library on the system depends on the graphics hardware installed on the workstation, hiding all device dependencies when direct rendering.





mjk@sgi.com